#include "database.h"

#include <QtSql/QSqlDatabase>

Database::Database(QObject *parent) : QObject(parent)
{
    create_database();  //创建数据库,连接数据库
}

//创建数据库,连接数据库
void Database::create_database()
{
    QSqlDatabase db;
    //避免重复连接数据库
    if(QSqlDatabase::contains("qt_sql_default_connection"))
    {
        db = QSqlDatabase::database("qt_sql_default_connection");
    }
    else
    {
        db = QSqlDatabase::addDatabase("QSQLITE");
        db.setHostName("127.0.0");
        db.setDatabaseName("FireSystem.db"); //设置数据库名称
        db.setUserName("user");
        db.setPassword("pwssword");
    }
    if(!db.open()){
        qDebug() << "database open error：" << db.lastError();
    }
    else{
        qDebug() << "database ok!";
    }

    // 用户账号管理UserInformation
    QSqlQuery query(db);
    if(db.tables().contains("UserInformation"))
    {
        //qDebug() << "table UserInformation already exists!";
    }
    else
    {   //表格不存在，则创建表格
        //创建表格UserInformation，用户名userName,密码password ,权限/角色root
        QString cmd = "create table UserInformation(userName varchar(50) primary key, password varchar(50), root varchar(30));";
        if(!query.exec(cmd)){
            qDebug() << "create UserInformation table error!";
        }
    }

    //监控区域配置MonitoringArea
    if(db.tables().contains("MonitoringArea"))
    {
        //qDebug() << "table MonitoringArea already exists!";
    }
    else
    {
        //表格不存在，则创建表格MonitoringArea  区域名称areaName 在总图上的坐标areCoordinate 平面图plan
        if(!query.exec("create table MonitoringArea(areaName varchar(50) primary key, areCoordinate varchar(50), plan varchar(30))"))
        {
            qDebug() << "create MonitoringArea table error!";
        }
    }

    //监控站点配置MonitoringSite
    if(db.tables().contains("MonitoringSite"))
    {
        //qDebug() << "table MonitoringSite already exists!";
    }
    else
    {
        //表格不存在，则创建表格MonitoringSite 站点名称siteName 所属区域region 设备ID id 区域上的坐标siteCoordinate
        if(!query.exec("create table MonitoringSite(siteName varchar(50) primary key, region varchar(50), id varchar(50), siteCoordinate varchar(50));"))
        {
            qDebug() << "create MonitoringSite table error!";
        }
    }
}


//查询用户权限，管理员true值班员false
bool Database::selecting(QString name)
{
    QSqlQuery query;    //执行查询语句
    QString cmd = QString("select root from UserInformation where userName='%1'").arg(name);
    //query是指向结果集以外的，我们可以利用query.next()，当第一次执行这句代码时，query便指向了结果集的第一条记录。
    if(query.exec(cmd))
    {
        if(query.next())
        {
            if(query.value(0) == "管理员")
            {
                return true;
            }

            else
            {
                return false;
            }
        }
    }
}


//判断用户输入的账号密码是否正确
bool Database::selecting(QString name, QString passd)
{
    QSqlQuery query;   //执行查询语句
    QString cmd = QString("select * from UserInformation where userName='%1' and password='%2';").arg(name).arg(passd);
    if(query.exec(cmd))
    {
        if(query.next())
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}


//显示监控区域配置的所有信息
QList<QList<QString> > Database::showRegion()
{
    QList<QString> in_list;   //内里容器，存放每一行
    QList<QList<QString> > out_list;    //外面容器存放所有的行

    QSqlQuery query;   //执行查询语句
    QString cmd = QString("select * from MonitoringArea;");
    query.exec(cmd);
    while(query.next())
    {   //区域名称 在总图上的坐标 平面图
        in_list.push_back(query.value(0).toString());
        in_list.push_back(query.value(1).toString());
        in_list.push_back(query.value(2).toString());

        out_list.append(in_list);   //数据按行添加
        in_list.clear();
    }
    return out_list;
}

//显示监控站点配置的所有信息
QList<QList<QString> > Database::showSite()
{
    QList<QString> in_list;   //内里容器，存放每一行
    QList<QList<QString> > out_list;    //外面容器存放所有的行

    QSqlQuery query;   //执行查询语句
    QString cmd = QString("select * from MonitoringSite;");
    query.exec(cmd);
    while(query.next())
    {   //站点名称 所属区域 设备ID 区域上的坐标
        in_list.push_back(query.value(0).toString());
        in_list.push_back(query.value(1).toString());
        in_list.push_back(query.value(2).toString());
        in_list.push_back(query.value(3).toString());

        out_list.append(in_list);   //数据按行添加
        in_list.clear();
    }
    return out_list;
}


bool Database::UpdataEmpTab(const accountInfo &Info)//修改账号信息
{
    QSqlQuery query(db);
    query.prepare("update UserInformation set password=:password,"
                  "root=:root where userName=:userName;");
    query.bindValue(":password",Info.accountInfo_password);
    query.bindValue(":root", Info.accountInfo_root);
    query.bindValue(":userName",Info.accountInfo_userName);
    if(!query.exec())
    {
        qDebug() << "updata error!";
        return false;
    }
    else
    {
        qDebug() << "updata success!";
        return true;
    }
}
//查询--设备ID
QString Database::queryDeviceID(const QString &siteName)
{
    QString DeviceID;
    QSqlQuery query(db);
    QString queryDeviceID="select *from MonitoringSite where siteName='"+siteName+"'";
    query.exec(queryDeviceID);
    if(!query.exec(queryDeviceID))
    {
        qDebug() <<"查询失败"<<query.lastError();
    }
    else
    {
        while(query.next())
        {
            DeviceID=query.value(2).toString();
            qDebug() <<DeviceID;
        }
    }
    return  DeviceID;
}
